import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Arrays;

public class UdpServer {

    private static final int PORT = 8888;
    public static void main(String[] args)throws IOException{
        // 1. 创建服务端 DatagramSocket，指定端口，可以发送和接收UDP数据报
        DatagramSocket socket = new DatagramSocket(PORT);  // 也可以不指定端口号，如果不指定，那么会自动随机分配
        // 不停的接收客户端发送的数据
        while(true){
            // 2. 创建数据报， 用于接收客户端发送的数据
            byte[] bytes = new byte[1024];  // upd报文的最大长度为 64k，包含udp首部 8 byte在内
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
            //   DatagramPacket 专门用来装 udp发送和接收的数据的
            System.out.println("---------------------------------------------------------------------");
            System.out.println("等待接收UDP数据报...");
            // 3.等待 客户端发送的udp数据报 ， 该方法在接收到数据报之前 会一直阻塞， 受到数据报之后DatagramPacket中的字段会被初始化赋值
            socket.receive(packet);        // DatagramSocket 最常用的方法之一  另一个是send
            System.out.printf("客户端IP：%s%n",packet.getAddress().getHostAddress());
            // getAddress 是获取DatagramPacket中 InetAddress对象 ，该对象中存储了 IP地址和端口号
            System.out.printf("客户端端口号：%s%n",packet.getPort());
            System.out.printf("客户端发送的原生数据为：%s%n", Arrays.toString(packet.getData()));
            System.out.printf("客户端发送的文本数据为：%s%n",new String(packet.getData()));

        }


    }





}
